package widget; import com.merybere.apps.ejercicio_rss.R; import data.ArticlesContract; import data.ArticlesDbHelper; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.support.v4.widget.SimpleCursorAdapter; import android.text.format.DateUtils; import android.widget.TextView; // SimpleAdapter con el proceso de inicializaci�n public class ArticlesAdapter extends SimpleCursorAdapter { // Correspondencia del HashMap con los ids de los objetos que se muestran: // - elementos del Array de HashMaps de eventos (from) // - elementos del dise�o en XML de cada una de las filas (to) private static final String[] FROM = new String[] {ArticlesContract.Articles.TITLE, ArticlesContract.Articles.PUB_DATE}; private static final int[] TO = new int[]{R.id.article_row_title, R.id.article_row_date}; private Context context; // Constructor: recibe un �nico // - Contexto que se tiene que pasar cuando se instancia public ArticlesAdapter(Context context) { // Llamamos al super utilizando lo que hemos definido como constantes // El layout que se pasa es el que hemos definido para una l�nea de art�culo super(context, R.layout.article_row, null, FROM, TO, FLAG_REGISTER_CONTENT_OBSERVER); this.context = context; initArticlesCursor(context); } private void initArticlesCursor(Context context) { // Para obtener el cursor, montamos una query final ArticlesDbHelper helper = new ArticlesDbHelper(context); // Obtener la BD en modo lectura, para obtener el cursor, ya que los datos ya est�n insertados final SQLiteDatabase db = helper.getReadableDatabase(); // Crear la consulta que nos devuelve los datos a mostrar en el listado String table = ArticlesContract.Articles.TABLE_NAME; String[] columns = new String[] { ArticlesContract.Articles._ID, ArticlesContract.Articles.TITLE, ArticlesContract.Articles.PUB_DATE}; String selection = null; String[] selectionArgs = null; String orderBy = ArticlesContract.Articles.PUB_DATE + " DESC"; String groupBy = null; String having = null; Cursor cursor = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy); // Cambiar el cursor que ten�a (null) por el cursor actual que tiene los datos que se van a mostrar this.swapCursor(cursor); } // M�todo que se utiliza para mostrar campos de texto @Override public void setViewText(TextView v, String text) { if(isDateView(v)) { text = getFormattedDate(text); } super.setViewText(v, text); } private String getFormattedDate(String text) { // Convertir el texto en un objeto fecha Long millis = Long.parseLong(text); // Relativo a la fecha actual, cu�nto tiempo ha transcurrido return (String)DateUtils.getRelativeTimeSpanString(context, millis); } // M�todo que comprueba si un campo de texto es la fecha private boolean isDateView(TextView v) { // Obtener el id de la vista que quiero comprobar si es fecha return v.getId() == R.id.article_row_date; } }